home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / GIMP 2.6.8 / gimp-2.6.8-i686-setup.exe / {app} / share / gimp / 2.0 / scripts / alien-glow-arrow.scm < prev    next >
Text File  |  2009-12-15  |  6KB  |  190 lines

  1. ; GIMP - The GNU Image Manipulation Program
  2. ; Copyright (C) 1995 Spencer Kimball and Peter Mattis
  3. ;
  4. ; Alien Glow themed arrows for web pages
  5. ; Copyright (c) 1997 Adrian Likins
  6. ; aklikins@eos.ncsu.edu
  7. ;
  8. ;
  9. ; Based on code from
  10. ; Federico Mena Quintero
  11. ; federico@nuclecu.unam.mx
  12. ;
  13. ; This program is free software; you can redistribute it and/or modify
  14. ; it under the terms of the GNU General Public License as published by
  15. ; the Free Software Foundation; either version 2 of the License, or
  16. ; (at your option) any later version.
  17. ;
  18. ; This program is distributed in the hope that it will be useful,
  19. ; but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21. ; GNU General Public License for more details.
  22. ;
  23. ; You should have received a copy of the GNU General Public License
  24. ; along with this program; if not, write to the Free Software
  25. ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  26.  
  27. (define (script-fu-alien-glow-right-arrow size
  28.                                           orientation
  29.                                           glow-color
  30.                                           bg-color
  31.                                           flatten)
  32.  
  33.   ; some local helper functions, better to not define globally,
  34.   ; since otherwise the definitions could be clobbered by other scripts.
  35.   (define (map proc seq)
  36.     (if (null? seq)
  37.         '()
  38.         (cons (proc (car seq))
  39.               (map proc (cdr seq))
  40.         )
  41.     )
  42.   )
  43.  
  44.   (define (for-each proc seq)
  45.     (if (not (null? seq))
  46.         (begin
  47.           (proc (car seq))
  48.           (for-each proc (cdr seq))
  49.         )
  50.     )
  51.   )
  52.  
  53.   (define (make-point x y)
  54.     (cons x y)
  55.   )
  56.  
  57.   (define (point-x p)
  58.     (car p)
  59.   )
  60.  
  61.   (define (point-y p)
  62.     (cdr p)
  63.   )
  64.  
  65.   (define (point-list->double-array point-list)
  66.     (define (convert points array pos)
  67.       (if (not (null? points))
  68.           (begin
  69.             (aset array (* 2 pos) (point-x (car points)))
  70.             (aset array (+ 1 (* 2 pos)) (point-y (car points)))
  71.             (convert (cdr points) array (+ pos 1))
  72.           )
  73.       )
  74.     )
  75.  
  76.     (let* (
  77.           (how-many (length point-list))
  78.           (a (cons-array (* 2 how-many) 'double))
  79.           )
  80.       (convert point-list a 0)
  81.       a
  82.     )
  83.   )
  84.  
  85.   (define (make-arrow size
  86.                       offset)
  87.     (list (make-point offset offset)
  88.           (make-point (- size offset) (/ size 2))
  89.           (make-point offset (- size offset))
  90.     )
  91.   )
  92.  
  93.  
  94.   (define (rotate-points points size orientation)
  95.     (map (lambda (p)
  96.            (let ((px (point-x p))
  97.                  (py (point-y p)))
  98.              (cond ((= orientation 0) (make-point px py))           ; right
  99.                    ((= orientation 1) (make-point (- size px) py))  ; left
  100.                    ((= orientation 2) (make-point py (- size px)))  ; up
  101.                    ((= orientation 3) (make-point py px))           ; down
  102.              )
  103.            )
  104.          )
  105.          points
  106.     )
  107.   )
  108.  
  109.  
  110.   ; the main function
  111.  
  112.   (let* (
  113.         (img (car (gimp-image-new size size RGB)))
  114.         (grow-amount (/ size 12))
  115.         (blur-radius (/ size 3))
  116.         (offset (/ size 6))
  117.         (ruler-layer (car (gimp-layer-new img
  118.                                           size size RGBA-IMAGE
  119.                                           "Ruler" 100 NORMAL-MODE)))
  120.         (glow-layer (car (gimp-layer-new img
  121.                                          size size RGBA-IMAGE
  122.                                          "Alien Glow" 100 NORMAL-MODE)))
  123.         (bg-layer (car (gimp-layer-new img
  124.                                        size size RGB-IMAGE
  125.                                        "Background" 100 NORMAL-MODE)))
  126.         (big-arrow (point-list->double-array
  127.                     (rotate-points (make-arrow size offset)
  128.                                     size orientation)))
  129.         )
  130.  
  131.     (gimp-context-push)
  132.  
  133.     (gimp-image-undo-disable img)
  134.     ;(gimp-image-resize img (+ length height) (+ height height) 0 0)
  135.     (gimp-image-add-layer img bg-layer 1)
  136.     (gimp-image-add-layer img glow-layer -1)
  137.     (gimp-image-add-layer img ruler-layer -1)
  138.  
  139.     (gimp-edit-clear glow-layer)
  140.     (gimp-edit-clear ruler-layer)
  141.  
  142.     (gimp-free-select img 6 big-arrow CHANNEL-OP-REPLACE TRUE FALSE 0)
  143.  
  144.     (gimp-context-set-foreground '(103 103 103))
  145.     (gimp-context-set-background '(0 0 0))
  146.  
  147.     (gimp-edit-blend ruler-layer FG-BG-RGB-MODE NORMAL-MODE
  148.                      GRADIENT-SHAPEBURST-ANGULAR 100 0 REPEAT-NONE FALSE
  149.                      FALSE 0 0 TRUE
  150.                      0 0 size size)
  151.  
  152.     (gimp-selection-grow img grow-amount)
  153.     (gimp-context-set-foreground glow-color)
  154.     (gimp-edit-fill glow-layer FOREGROUND-FILL)
  155.  
  156.     (gimp-selection-none img)
  157.  
  158.  
  159.     (plug-in-gauss-rle RUN-NONINTERACTIVE img glow-layer blur-radius TRUE TRUE)
  160.  
  161.     (gimp-context-set-background bg-color)
  162.     (gimp-edit-fill bg-layer BACKGROUND-FILL)
  163.  
  164.     (if (= flatten TRUE)
  165.         (gimp-image-flatten img)
  166.     )
  167.     (gimp-image-undo-enable img)
  168.     (gimp-display-new img)
  169.  
  170.     (gimp-context-pop)
  171.   )
  172. )
  173.  
  174. (script-fu-register "script-fu-alien-glow-right-arrow"
  175.   _"_Arrow..."
  176.   _"Create an arrow graphic with an eerie glow for web pages"
  177.   "Adrian Likins"
  178.   "Adrian Likins"
  179.   "1997"
  180.   ""
  181.   SF-ADJUSTMENT _"Size"             '(32 5 150 1 10 0 1)
  182.   SF-OPTION     _"Orientation"      '(_"Right" _"Left" _"Up" _"Down")
  183.   SF-COLOR      _"Glow color"       '(63 252 0)
  184.   SF-COLOR      _"Background color" "black"
  185.   SF-TOGGLE     _"Flatten image"    TRUE
  186. )
  187.  
  188. (script-fu-menu-register "script-fu-alien-glow-right-arrow"
  189.                          "<Image>/File/Create/Web Page Themes/Alien Glow")
  190.